package com.wu.crud.controller;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wu.crud.bean.Admin;
import com.wu.crud.bean.Msg;
import com.wu.crud.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

/**
 * 处理管理员的CRUD操作
 */
@Controller
public class AdminController {
    @Autowired
    AdminService adminService;

    /**
     * 删除管理员
     * @param ids
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/admin/{ids}", method = RequestMethod.DELETE)
    public Msg deleteAdmin(@PathVariable("ids")String ids){
        //批量删除
        if (ids.contains("-")){
            List<String> del_ids = new ArrayList<String>();
            String[] str_ids = ids.split("-");
            //组装id的集合
            for (String str :str_ids){
                del_ids.add(str);
            }
            adminService.deleteBatch(del_ids);
        }else {
            String id = ids;
            adminService.deleteAdmin(id);
        }
        return Msg.success();
    }

    /**
     * 更新管理员
     * @param admin
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value="/admin/{aid}",method=RequestMethod.PUT)
    public Msg saveAdmin(Admin admin, HttpServletRequest request){
        System.out.println("请求体中的值" + request.getParameter("adminName"));
        admin.setAname(request.getParameter("adminName"));
        admin.setApassword(request.getParameter("adminPassword"));
        admin.setAtelphone(request.getParameter("adminTelphone"));
        System.out.println("将要更新的数据" + admin+"\t"+admin.getAname());
        adminService.updateAdmin(admin);
        return Msg.success();
    }

    /**
     * 根据id查询
     * @param aid
     * @return
     */
    @ResponseBody
    @RequestMapping(value="/admin/{aid}")
    public Msg getAdmin(@PathVariable("aid")String aid){
        Admin admin = adminService.getAdmin(aid);
        return Msg.success().add("admins", admin);
    }

    /**
     * 检查名字是否可用
     * @param aname
     * @return
     */
    @ResponseBody
    @RequestMapping("/checkadmin")
    public Msg checkuser(@RequestParam("aname")String aname){
        //先判断用户名是否是合法的表达式;
        String regx = "(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})";
//        String regx = "(^[\u2E80-\u9FFF]{2,5})";
        if(!aname.matches(regx)){
            return Msg.fail().add("va_msg", "用户名必须是6-16位数字和字母的组合或者2-5位中文");
//            return Msg.fail().add("va_msg", "用户名必须是2-5位中文");
        }
        //数据库用户名重复校验
        boolean b = adminService.checkAdmin(aname);
        if(b){
            return Msg.success();
        }else{
            return Msg.fail().add("va_msg", "名字不可用");
        }
    }

    /**
     * 管理员保存
     * 1、支持JSR303校验
     * 2、导入Hibernate-Validator
     * @return
     */
    @ResponseBody
    @RequestMapping(value="/admin",method=RequestMethod.POST)
    public Msg insertAdmin(@Valid Admin admin, BindingResult result, HttpServletRequest request){
//        if(result.hasErrors()){
//            //校验失败，应该返回失败，在模态框中显示校验失败的错误信息
//            Map<String, Object> map = new HashMap<String, Object>();
//            List<FieldError> errors = result.getFieldErrors();
//            for (FieldError fieldError : errors) {
//                System.out.println("错误的字段名："+fieldError.getField());
//                System.out.println("错误信息："+fieldError.getDefaultMessage());
//                map.put(fieldError.getField(), fieldError.getDefaultMessage());
//            }
//            return Msg.fail().add("errorFields", map);
//        }else{
//        System.out.println(admin.getAname());
        admin.setAid(request.getParameter("adminId"));
        admin.setAname(request.getParameter("adminName"));
        admin.setApassword(request.getParameter("adminPassword"));
        admin.setAtelphone(request.getParameter("adminTelphone"));
            adminService.insertAdmin(admin);
            return Msg.success();
//        }

    }

    /**
     * 导入jackson包。
     * @param pn
     * @return
     */
    @ResponseBody
    @RequestMapping("/admin")
    public Msg getAdminsWithJson(
            @RequestParam(value = "pn", defaultValue = "1") Integer pn) {
        // 这不是一个分页查询
        // 引入PageHelper分页插件
        // 在查询之前只需要调用，传入页码，以及每页的大小
        PageHelper.startPage(pn, 5);
        // startPage后面紧跟的这个查询就是一个分页查询
        List<Admin> admins = adminService.getAll();
        // 使用pageInfo包装查询后的结果，只需要将pageInfo交给页面就行了。
        // 封装了详细的分页信息,包括有我们查询出来的数据，传入连续显示的页数
        PageInfo page = new PageInfo(admins, 5);
        return Msg.success().add("pageInfo", page);
    }

    /**
     *
     * 查询员工数据（分页查询）
     *
     * @return
     */
//	@RequestMapping("/admin")
    public String getAdmin(
            @RequestParam(value = "pn", defaultValue = "1") Integer pn,
            Model model) {
        // 这不是一个分页查询；
        // 引入PageHelper分页插件
        // 在查询之前只需要调用，传入页码，以及每页的大小
        PageHelper.startPage(pn, 5);
        // startPage后面紧跟的这个查询就是一个分页查询
        List<Admin> admins = adminService.getAll();
        // 使用pageInfo包装查询后的结果，只需要将pageInfo交给页面就行了。
        // 封装了详细的分页信息,包括有我们查询出来的数据，传入连续显示的页数
        PageInfo page = new PageInfo(admins, 5);
        model.addAttribute("pageInfo", page);
        return "list";
    }

    /**
     * 跳转到学生登录
     * @return
     */
    @RequestMapping("/login")
    public String toStuLogin(){
	    return "login";
    }

    /**
     * 跳转到辅导员登录
     * @return
     */
    @RequestMapping("/login_S")
    public String toTeaLogin(){
        return "login_S";
    }

    /**
     * 跳转到辅导员管理页面
     * @return
     */
    @RequestMapping("/teaManager")
    public String toTeaManager(){
        return "/teaManage";
    }

}
